library(tidyverse)
library(sf)
library(geobr)
library(plotly)
library(leaflet)
library(viridis)
# Dados Temperatura
temp = read.csv("C:/Users/rodri/OneDrive - Insper/ConsumoEnergiaRJ/Temperaturas - RJ/TODOS OS ANOS.CSV",
fileEncoding = 'Latin1', sep = ";")
# Renomear as colunas do dataset
names(temp) <- c(
"data",
"hora_utc",
"precipitacao_mm",
"pressao_estacao_mb",
"pressao_max_mb",
"pressao_min_mb",
"radiacao_kj_m2",
"temp_ar_c",
"temp_orvalho_c",
"temp_max_c",
"temp_min_c",
"temp_orvalho_max_c",
"temp_orvalho_min_c",
"umid_rel_max",
"umid_rel_min",
"umid_rel",
"vento_direcao_graus",
"vento_rajada_max_ms",
"vento_vel_ms"
)
# Visualizar os novos nomes
str(temp)
## 'data.frame': 105192 obs. of 19 variables:
## $ data : chr "01/01/2009" "01/01/2009" "01/01/2009" "01/01/2009" ...
## $ hora_utc : chr "00:00" "01:00" "02:00" "03:00" ...
## $ precipitacao_mm : chr "0" "0" "0" "0" ...
## $ pressao_estacao_mb : chr "1010,2" "1009,7" "1009,4" "1008,4" ...
## $ pressao_max_mb : chr "1010,3" "1010,3" "1009,7" "1009,4" ...
## $ pressao_min_mb : chr "1009,5" "1009,7" "1009,1" "1008,4" ...
## $ radiacao_kj_m2 : chr "0" "0" "0" "0" ...
## $ temp_ar_c : chr "25,6" "25,2" "25,5" "24,6" ...
## $ temp_orvalho_c : chr "23,9" "22,6" "20,7" "21,2" ...
## $ temp_max_c : chr "25,7" "25,6" "25,6" "25,5" ...
## $ temp_min_c : chr "25,5" "25,2" "25,2" "24,6" ...
## $ temp_orvalho_max_c : chr "24,1" "23,9" "22,5" "21,2" ...
## $ temp_orvalho_min_c : chr "23,9" "22,6" "20,5" "20,6" ...
## $ umid_rel_max : int 91 91 85 81 88 96 96 95 95 96 ...
## $ umid_rel_min : int 90 85 74 75 81 88 93 91 94 94 ...
## $ umid_rel : int 91 85 75 81 88 96 93 95 94 96 ...
## $ vento_direcao_graus: int 263 265 260 28 67 356 228 305 272 233 ...
## $ vento_rajada_max_ms: chr "6,3" "7" "6,1" "4,4" ...
## $ vento_vel_ms : chr "3,8" "1,6" "2,4" "1,1" ...
# Definir as colunas que devem ser convertidas para o formato numérico, tratando NA
cols_to_numeric <- c(
"precipitacao_mm", # Precipitação em milímetros
"pressao_estacao_mb", # Pressão atmosférica na estação em milibares
"pressao_max_mb", # Pressão máxima em milibares
"pressao_min_mb", # Pressão mínima em milibares
"radiacao_kj_m2", # Radiação em kilojoules por metro quadrado
"temp_ar_c", # Temperatura do ar em graus Celsius
"temp_orvalho_c", # Temperatura do ponto de orvalho em graus Celsius
"temp_max_c", # Temperatura máxima em graus Celsius
"temp_min_c", # Temperatura mínima em graus Celsius
"temp_orvalho_max_c", # Temperatura máxima do ponto de orvalho em graus Celsius
"temp_orvalho_min_c", # Temperatura mínima do ponto de orvalho em graus Celsius
"umid_rel_max", # Umidade relativa máxima em porcentagem
"umid_rel_min", # Umidade relativa mínima em porcentagem
"umid_rel", # Umidade relativa média em porcentagem
"vento_direcao_graus", # Direção do vento em graus
"vento_rajada_max_ms", # Velocidade máxima de rajada de vento em metros por segundo
"vento_vel_ms" # Velocidade média do vento em metros por segundo
)
# Substituir vírgulas por pontos nos valores das colunas selecionadas e convertê-los para numérico
temp[cols_to_numeric] <- lapply(temp[cols_to_numeric], function(col) {
as.numeric(gsub(",", ".", col)) # Substituir "," por "." e converter para numérico
})
# Agrupar os dados por data e calcular a média da temperatura máxima, ignorando valores NA
temp1 <- temp %>%
group_by(data) %>% # Agrupar os dados por data
summarise(temp_max_c = mean(temp_max_c, na.rm = TRUE)) %>% # Calcular a média da temperatura máxima
mutate(data = as.Date(data, format = "%d/%m/%Y")) %>% # Converter a coluna 'data' para o formato de data
arrange((data)) # Ordenar os dados pela data
# Criar um objeto com os 10 dias de maior temperatura máxima
top_10_dias_maior_temp <- temp1 %>%
slice_max(temp_max_c, n = 10) # Selecionar os 10 maiores valores de temperatura máxima
top_10_dias_maior_temp # Visualizar o objeto com os 10 dias de maior temperatura máxima
## # A tibble: 10 × 2
## data temp_max_c
## <date> <dbl>
## 1 2020-10-02 36.6
## 2 2011-01-28 35.9
## 3 2011-02-09 35.7
## 4 2011-02-06 35.0
## 5 2011-02-22 34.9
## 6 2011-02-12 34.4
## 7 2011-02-07 34.3
## 8 2011-02-14 34.2
## 9 2011-02-10 34.2
## 10 2011-02-21 34.1
# Criar um objeto com os 10 dias de menor temperatura máxima
top_10_dias_menor_temp <- temp1 %>%
slice_min(temp_max_c, n = 10) # Selecionar os 10 menores valores de temperatura máxima
top_10_dias_menor_temp # Visualizar o objeto com os 10 dias de menor temperatura máxima
## # A tibble: 10 × 2
## data temp_max_c
## <date> <dbl>
## 1 2011-07-09 15.0
## 2 2013-07-25 15.2
## 3 2013-07-24 15.3
## 4 2009-06-04 16.5
## 5 2016-06-13 16.6
## 6 2014-08-14 16.7
## 7 2017-07-19 16.9
## 8 2019-08-04 17.0
## 9 2020-08-22 17.0
## 10 2011-07-05 17.1
# Criando um gráfico interativo
plot_ly(
data = temp1,
x = ~data,
y = ~temp_max_c,
type = 'scatter',
mode = 'lines',
line = list(shape = 'linear', color = 'black', width = 0.5), # Linha azul e espessura ajustada
hoverinfo = 'text',
text = ~paste('Data:', format(data, "%d/%m/%Y"), '<br>Temp Máxima (°C):', round(temp_max_c, 1))
)
# Agrupamento por mês e cálculo da temperatura máxima média
temp1 <- temp %>%
mutate(mes = format(as.Date(data, format = "%d/%m/%Y"), "%Y-%m")) %>% # Extrair o mês e o ano da coluna 'data'
group_by(mes) %>% # Agrupar os dados por mês
summarise(temp_max_c = mean(temp_max_c, na.rm = TRUE)) %>% # Calcular a média da temperatura máxima por mês
mutate(mes = as.Date(paste0(mes, "-01"))) %>% # Converter o mês de volta para o formato de data (primeiro dia do mês)
arrange(mes) # Ordenar os dados pelo mês
# Criar um objeto com os 10 meses de maior temperatura máxima média
top_10_mes_maior_temp <- temp1 %>%
slice_max(temp_max_c, n = 10) # Selecionar os 10 maiores valores de temperatura máxima média por mês
top_10_mes_maior_temp # Visualizar o objeto com os 10 meses de maior temperatura máxima média
## # A tibble: 10 × 2
## mes temp_max_c
## <date> <dbl>
## 1 2011-02-01 32.2
## 2 2019-01-01 30.3
## 3 2014-02-01 30.0
## 4 2015-01-01 29.8
## 5 2010-02-01 29.8
## 6 2014-01-01 29.7
## 7 2012-12-01 29.3
## 8 2011-01-01 29.1
## 9 2017-02-01 29.0
## 10 2017-01-01 29.0
# Criar um objeto com os 10 meses de menor temperatura máxima média
top_10_mes_menor_temp <- temp1 %>%
slice_min(temp_max_c, n = 10) # Selecionar os 10 menores valores de temperatura máxima média por mês
top_10_mes_menor_temp # Visualizar o objeto com os 10 meses de menor temperatura máxima média
## # A tibble: 10 × 2
## mes temp_max_c
## <date> <dbl>
## 1 2016-06-01 20.2
## 2 2010-06-01 20.2
## 3 2011-06-01 20.3
## 4 2013-07-01 20.4
## 5 2011-07-01 20.5
## 6 2009-06-01 20.5
## 7 2017-07-01 20.6
## 8 2017-08-01 20.9
## 9 2014-07-01 21.0
## 10 2009-07-01 21.1
# Criando o gráfico interativo por mês
plot_ly(
data = temp1,
x = ~mes,
y = ~temp_max_c,
type = 'scatter',
mode = 'lines+markers',
line = list(shape = 'linear', color = 'blue', width = 2), # Linha azul e espessura ajustada
marker = list(size = 6, color = 'red'), # Marcadores vermelhos maiores
hoverinfo = 'text',
text = ~paste('Mês:', format(mes, "%b %Y"), '<br>Temp Máxima (°C):', round(temp_max_c, 1))
) %>%
layout(
title = 'Evolução da Temperatura Máxima Média Mensal',
xaxis = list(
title = 'Mês',
tickformat = "%b %Y", # Formato dos ticks no eixo X
rangeslider = list(visible = TRUE) # Adiciona slider para facilitar o zoom
),
yaxis = list(title = 'Temperatura Máxima (°C)'),
hovermode = 'x unified' # Mostra valores em uma linha vertical ao passar o mouse
)
# Análise de chuva
preciptacao <- temp %>%
group_by(data) %>% # Agrupar os dados por data
summarise(precipitacao_mm = mean(precipitacao_mm, na.rm = TRUE)) %>% # Calcular a média da precipitação (mm) por dia, ignorando valores NA
mutate(data = as.Date(data, format = "%d/%m/%Y")) %>% # Converter a coluna 'data' para o formato de data
arrange((data)) # Ordenar os dados por data em ordem crescente
# Criar um objeto com os 10 dias de maior precipitação média
top_10_dias_maior_chuva <- preciptacao %>%
slice_max(precipitacao_mm, n = 10) # Selecionar os 10 maiores valores de precipitação média por dia
top_10_dias_maior_chuva # Visualizar o objeto com os 10 dias de maior precipitação média
## # A tibble: 10 × 2
## data precipitacao_mm
## <date> <dbl>
## 1 2020-03-01 8.42
## 2 2009-12-31 6.47
## 3 2019-04-09 5.46
## 4 2017-11-20 5.28
## 5 2011-04-26 4.72
## 6 2020-02-03 4.67
## 7 2011-12-19 4.08
## 8 2015-02-15 3.96
## 9 2009-05-29 3.82
## 10 2009-12-30 3.75
# Criar um objeto com os 10 dias de menor precipitação média
top_10_dias_menor_chuva <- preciptacao %>%
slice_min(precipitacao_mm, n = 10) # Selecionar os 10 menores valores de precipitação média por dia
top_10_dias_menor_chuva # Visualizar o objeto com os 10 dias de menor precipitação média
## # A tibble: 2,595 × 2
## data precipitacao_mm
## <date> <dbl>
## 1 2009-01-02 0
## 2 2009-01-13 0
## 3 2009-01-14 0
## 4 2009-01-15 0
## 5 2009-01-17 0
## 6 2009-01-19 0
## 7 2009-01-21 0
## 8 2009-02-01 0
## 9 2009-02-04 0
## 10 2009-02-05 0
## # ℹ 2,585 more rows
# Leitura dos dados de energia
energia <- read_sf("C:/Users/rodri/OneDrive - Insper/ConsumoEnergiaRJ/DadosCompletos.csv") # Carregar o arquivo CSV com os dados de energia
energia <- energia %>%
filter(BAIRRO != "RIO DE JANEIRO") # Filtrar os dados para excluir o bairro 'RIO DE JANEIRO'
energia$total_consumo_kwh <- as.numeric(energia$total_consumo_kwh) # Converter a coluna de consumo total de energia para numérico
# Converter MES_REFERENCIA para o formato de data
energia <- energia %>%
mutate(MES_REFERENCIA = as.Date(MES_REFERENCIA, format = "%d/%m/%Y")) # Converter a coluna 'MES_REFERENCIA' para o formato de data
# Agrupar os dados por bairro e mês, somar o consumo total de energia
energia <- energia %>%
group_by(BAIRRO, MES_REFERENCIA) %>%
summarise(total_consumo_kwh = sum(total_consumo_kwh, na.rm = TRUE)) %>% # Somar o consumo de energia por bairro e mês
mutate(total_consumo_kwh = as.integer(total_consumo_kwh)) # Garantir que o consumo total seja tratado como inteiro
# Criar um gráfico interativo da série temporal de consumo de energia
plot_ly(data = energia,
x = ~MES_REFERENCIA,
y = ~total_consumo_kwh,
type = 'scatter',
mode = 'lines+markers',
color = ~BAIRRO, # Diferenciar as linhas por bairro
text = ~paste('Bairro:', BAIRRO, '<br>Total Consumption (kWh):', total_consumo_kwh, '<br>Month:', MES_REFERENCIA),
hoverinfo = 'text', # Esta linha garante que somente as informações de texto sejam mostradas no hover
name = ~BAIRRO,
line = list(shape = 'linear')) %>%
layout(title = 'Monthly Energy Consumption Over Time', # Título do gráfico
xaxis = list(title = 'Month'), # Título do eixo X
yaxis = list(title = 'Total Consumption (kWh)'), # Título do eixo Y
hovermode = 'closest') # Define o modo de hover para mostrar os dados do ponto mais próximo
# Resumo do consumo total de energia por bairro
energia_summary <- energia %>%
group_by(BAIRRO) %>%
summarise(total_consumo_kwh = sum(total_consumo_kwh, na.rm = TRUE)) %>%
ungroup() # Resumo do consumo total de energia por bairro
# Criar um objeto com os 10 bairros de maior consumo de energia
top_10_bairros <- energia_summary %>%
slice_max(total_consumo_kwh, n = 10) # Selecionar os 10 bairros com maior consumo de energia
# Criar um objeto com os 10 bairros de menor consumo de energia
bottom_10_bairros <- energia_summary %>%
slice_min(total_consumo_kwh, n = 10) # Selecionar os 10 bairros com menor consumo de energia
# Visualizar os resultados
print(top_10_bairros) # Exibir os 10 bairros com maior consumo
## # A tibble: 10 × 2
## BAIRRO total_consumo_kwh
## <chr> <dbl>
## 1 "CENTRO(RJ)" 16342629591
## 2 "SAO CRISTOVAO " 2630997483
## 3 "FREGUESIA " 2150135102
## 4 "CIDADE NOVA " 1607266924
## 5 "RIO COMPRIDO" 1247919182
## 6 "BENFICA " 773436750
## 7 "GAMBOA" 653889949
## 8 "SANTO CRISTO" 576404203
## 9 "CAJU " 524643209
## 10 "SANTA TERESA" 474415527
print(bottom_10_bairros) # Exibir os 10 bairros com menor consumo
## # A tibble: 10 × 2
## BAIRRO total_consumo_kwh
## <chr> <dbl>
## 1 "MANGUEIRA" 58695797
## 2 "CATUMBI " 160329995
## 3 "ESTACIO " 300749314
## 4 "VASCO DA GAMA" 417832387
## 5 "SAUDE" 472243171
## 6 "SANTA TERESA" 474415527
## 7 "CAJU " 524643209
## 8 "SANTO CRISTO" 576404203
## 9 "GAMBOA" 653889949
## 10 "BENFICA " 773436750
# Resumir o consumo total de energia por BAIRRO e MES_REFERENCIA
energia_summary <- energia %>%
group_by(BAIRRO, MES_REFERENCIA) %>% # Agrupar os dados por bairro e mês
summarise(total_consumo_kwh = sum(total_consumo_kwh, na.rm = TRUE)) %>% # Somar o consumo de energia, ignorando os valores ausentes (NA)
ungroup() # Remover o agrupamento após o cálculo da soma
# Criar um objeto com os 10 bairros de maior consumo de energia
top_10_bairros <- energia_summary %>%
slice_max(total_consumo_kwh, n = 10) # Selecionar os 10 bairros com maior consumo de energia
# Criar um objeto com os 10 bairros de menor consumo de energia
bottom_10_bairros <- energia_summary %>%
slice_min(total_consumo_kwh, n = 10) # Selecionar os 10 bairros com menor consumo de energia
# Visualizar os resultados
print(top_10_bairros) # Exibir os 10 bairros com maior consumo de energia
## # A tibble: 10 × 3
## BAIRRO MES_REFERENCIA total_consumo_kwh
## <chr> <date> <int>
## 1 CENTRO(RJ) 2013-04-01 221881787
## 2 CENTRO(RJ) 2019-11-01 196018470
## 3 CENTRO(RJ) 2014-02-01 153104158
## 4 CENTRO(RJ) 2011-02-01 146084314
## 5 CENTRO(RJ) 2010-02-01 144171339
## 6 CENTRO(RJ) 2015-03-01 141749876
## 7 CENTRO(RJ) 2014-03-01 140833696
## 8 CENTRO(RJ) 2010-12-01 140690594
## 9 CENTRO(RJ) 2012-03-01 140543755
## 10 CENTRO(RJ) 2015-02-01 140117504
print(bottom_10_bairros) # Exibir os 10 bairros com menor consumo de energia
## # A tibble: 10 × 3
## BAIRRO MES_REFERENCIA total_consumo_kwh
## <chr> <date> <int>
## 1 MANGUEIRA 2012-09-01 167368
## 2 MANGUEIRA 2012-07-01 257725
## 3 MANGUEIRA 2012-08-01 260411
## 4 MANGUEIRA 2012-06-01 260750
## 5 MANGUEIRA 2011-07-01 272781
## 6 MANGUEIRA 2010-08-01 276669
## 7 MANGUEIRA 2012-05-01 279952
## 8 MANGUEIRA 2010-07-01 281720
## 9 MANGUEIRA 2011-06-01 282476
## 10 MANGUEIRA 2010-06-01 284785
rj = read_census_tract(code_tract = "RJ", year = 2010)
## Using year/date 2010
# Convert to uppercase and remove special characters
rj$name_neighborhood <- rj$name_neighborhood %>%
toupper() %>% # Convert to uppercase
str_replace_all("[^A-Z0-9 ]", "")
# Carregar dados de renda por setor censitário
rj1 = read.csv("C:/Users/rodri/OneDrive - Insper/ConsumoEnergiaRJ/Dados/RJ_20231030/Base informaçoes setores2010 universo RJ/CSV/Basico_RJ.csv",
sep = ";", fileEncoding = 'Latin1') # Carregar arquivo CSV contendo os dados de renda por setor censitário
# Selecionar apenas as colunas necessárias
rj1 <- rj1 %>%
select(Cod_setor, V005) # Selecionar as colunas Cod_setor (código do setor) e V005 (renda)
# Garantir que a coluna 'Cod_setor' seja do tipo caractere
rj1$Cod_setor = as.character(rj1$Cod_setor)
# Unir os dados de rj1 com outro dataframe rj usando a coluna 'Cod_setor' de rj1 e 'code_tract' de rj
rj2 <- merge(rj, rj1, by.y = "Cod_setor", by.x = "code_tract") # Realizar a mesclagem dos dados
# Substituir vírgulas por pontos e converter para numérico a coluna 'V005'
rj2$V005 <- gsub(pattern = ",", replacement = ".", x = rj2$V005) # Substituir vírgula por ponto decimal
rj2$V005 <- as.numeric(rj2$V005) # Converter a coluna para tipo numérico
# Renomear a coluna 'V005' para 'Renda' e filtrar os dados para o município do Rio de Janeiro
rj2 <- rj2 %>%
rename(Renda=V005) %>% # Renomear coluna para 'Renda'
filter(name_muni == "Rio De Janeiro") # Filtrar apenas os dados do município do Rio de Janeiro
summary(rj2$Renda) # Exibir um resumo estatístico da variável 'Renda'
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 101.1 788.1 1287.6 2136.4 2537.9 28326.4 38
# Calcular os deciséis e criar categorias personalizadas para a renda
rj2 <- rj2 %>%
filter(!is.na(Renda)) %>% # Remover linhas onde 'Renda' é NA (valor ausente)
mutate(
Quintil = ntile(Renda, 5), # Dividir a renda em 5 quintis (categorias baseadas nos percentis)
Renda_Quint = case_when( # Criar uma nova coluna com categorias de quintil
Quintil == 1 ~ "0-20%", # 1º quintil: 0-20%
Quintil == 2 ~ "20-40%", # 2º quintil: 20-40%
Quintil == 3 ~ "40-60%", # 3º quintil: 40-60%
Quintil == 4 ~ "60-80%", # 4º quintil: 60-80%
Quintil == 5 ~ "80-100%", # 5º quintil: 80-100%
)
)
# Carregar dados dos bairros do Rio de Janeiro
bairros_rj <- read_neighborhood(year = 2010, simplified = FALSE) # Carregar os dados de bairros do Rio de Janeiro
# Filtrar e selecionar apenas bairros do município do Rio de Janeiro
bairros_rj <- bairros_rj %>%
filter(abbrev_state == "RJ") %>% # Filtrar para o estado do Rio de Janeiro
filter(name_muni == "Rio De Janeiro") %>% # Filtrar para o município do Rio de Janeiro
rename(Bairro = name_neighborhood) %>% # Renomear a coluna de nome do bairro
select(Bairro) # Selecionar apenas a coluna com os nomes dos bairros
# Realizar o "join" espacial entre os dados de renda (rj2) e os bairros (bairros_rj)
rj3 <- st_join(x = rj2, y = bairros_rj) # Realizar junção espacial, associando dados de renda aos bairros
# Transformar a projeção espacial para o sistema de coordenadas geográficas WGS84 (EPSG:4326)
rj3 <- st_transform(rj3, crs = 4326) # Garantir que as coordenadas geográficas estejam no formato adequado (latitude e longitude)
# Criar paleta de cores customizada com base nos percentis de renda
breaks <- quantile(rj3$Renda, probs = seq(0, 1, by = 0.125), na.rm = TRUE) # Calcular os percentis de 0 a 100% para a renda
pal <- colorBin(palette = "YlOrRd", domain = rj3$Renda, bins = breaks) # Definir uma paleta de cores "YlOrRd" para representar a renda
# Criar mapa interativo com Leaflet
leaflet(data = rj3) %>%
addTiles() %>% # Adicionar o mapa base (tiles)
addPolygons(
fillColor = ~pal(Renda), # Preencher as regiões com as cores definidas pela paleta, baseadas na renda
fillOpacity = 0.9, # Ajustar a opacidade do preenchimento das áreas
color = "transparent", # Remover a linha de borda das áreas (tornando-a transparente)
weight = 0, # Definir o peso da linha para 0, removendo a borda visível
popup = ~paste("Bairro: ", Bairro, "Renda: ", Renda_Quint), # Exibir informações sobre o bairro e o quintil da renda no popup
label = ~paste("Bairro: ", Bairro, "Renda: ", Renda) # Exibir rótulos com o nome do bairro e o valor da renda
) %>%
addLegend(
pal = pal, # Adicionar a legenda com a paleta de cores para a renda
values = rj3$Renda, # Definir os valores a serem utilizados na legenda (renda)
title = "Renda", # Título da legenda
opacity = 0.95 # Definir a opacidade da legenda
) %>%
setView(lng = -43.1700, lat = -22.9068, zoom = 10) # Ajustar a visualização do mapa para o Rio de Janeiro
# Agrupar dados por bairro e calcular a renda média e mediana por bairro
rj4 <- rj3 %>%
st_drop_geometry() %>% # Remover a geometria espacial (transformando em dados tabulares)
group_by(Bairro) %>% # Agrupar os dados pelo nome do bairro
summarise(
renda_media = mean(Renda, na.rm = TRUE), # Calcular a renda média por bairro
renda_mediana = median(Renda, na.rm = TRUE) # Calcular a renda mediana por bairro
)
# Realizar a junção dos dados de renda média com os bairros
bairros_rj2 <- merge(bairros_rj, rj4, by = "Bairro") # Mesclar dados de renda média com os dados dos bairros
# Criar uma nova paleta de cores com base na renda média dos bairros
pal <- colorBin(palette = "YlOrRd", domain = bairros_rj2$renda_media, bins = 5) # Definir a paleta de cores com 5 intervalos para a renda média
# Criar mapa interativo com Leaflet para visualizar a renda média por bairro
leaflet(data = bairros_rj2) %>%
addTiles() %>% # Adicionar o mapa base (tiles)
addPolygons(
fillColor = ~pal(renda_media), # Preencher as áreas com as cores da paleta, baseadas na renda média
fillOpacity = 0.9, # Ajustar a opacidade do preenchimento das áreas
color = "transparent", # Remover a borda das áreas (tornando-a transparente)
weight = 0, # Definir o peso da borda para 0, removendo a linha visível
popup = ~paste("Bairro: ", Bairro, "Renda Média: ", renda_media), # Exibir a renda média de cada bairro no popup
label = ~paste("Bairro: ", Bairro, "Renda Média: ", renda_media) # Exibir a renda média nos rótulos dos bairros
) %>%
addLegend(
pal = pal, # Adicionar a legenda com a paleta de cores para a renda média
values = bairros_rj2$renda_media, # Definir os valores a serem usados na legenda (renda média)
title = "Renda Média", # Título da legenda
opacity = 0.7 # Definir a opacidade da legenda
) %>%
setView(lng = -43.3900, lat = -22.9500, zoom = 10) # Ajustar a visualização do mapa para o Rio de Janeiro
# Remover espaços extras e padronizar os nomes dos bairros para caixa alta nos dois datasets
energia_summary$BAIRRO <- trimws(toupper(energia_summary$BAIRRO)) # Remover espaços extras e converter para caixa alta
bairros_rj2$Bairro <- toupper(bairros_rj2$Bairro) # Converter para caixa alta no segundo dataset
# Remover acentos da coluna Bairro em bairros_rj2 para padronização
bairros_rj2 <- bairros_rj2 %>%
mutate(Bairro = iconv(Bairro, from = "UTF-8", to = "ASCII//TRANSLIT")) # Remover acentos dos nomes dos bairros
# Ajustar alguns bairros específicos que têm nomes alternativos ou abreviados
bairros_rj2 <- bairros_rj2 %>%
mutate(Bairro = ifelse(Bairro %in% c("FREGUESIA (ILHA DO GOVERNADOR)", "FREGUESIA (JACAREPAGUA)"),
"FREGUESIA", Bairro)) %>% # Agrupar bairros com variações no nome (Freguesia)
group_by(Bairro) %>% # Agrupar os dados pelo bairro
summarise(
renda_media = mean(renda_media, na.rm = TRUE), # Calcular a média da renda por bairro
renda_mediana = median(renda_mediana, na.rm = TRUE), # Calcular a mediana da renda por bairro
geom = st_union(geom) # Unir os polígonos (necessário para manter a geometria na operação espacial)
)
# Criar um dicionário de correção para os bairros
correcao_bairros <- c(
"BENFICA " = "BENFICA",
"CAJU " = "CAJU",
"CATUMBI " = "CATUMBI",
"CENTRO(RJ)" = "CENTRO",
"CIDADE NOVA " = "CIDADE NOVA",
"ESTACIO " = "ESTÁCIO",
"FREGUESIA " = "FREGUESIA",
"RIO COMPRIDO" = "RIO COMPRIDO",
"MANGUEIRA" = "MANGUEIRA",
"GAMBOA" = "GAMBOA",
"SANTA TERESA" = "SANTA TERESA",
"SANTO CRISTO" = "SANTO CRISTO",
"SAO CRISTOVAO " = "SÃO CRISTÓVÃO",
"SAUDE" = "SAUDE",
"VASCO DA GAMA" = "VASCO DA GAMA"
)
# Aplicar as correções usando a função recode
energia_summary <- energia_summary %>%
mutate(BAIRRO = recode(BAIRRO, !!!correcao_bairros)) %>% # Corrigir os nomes dos bairros conforme o dicionário
mutate(BAIRRO = iconv(BAIRRO, from = "UTF-8", to = "ASCII//TRANSLIT")) # Remover acentos da coluna BAIRRO
# Verificar se existem bairros que não estão correspondendo entre os dois datasets
bairros_nao_correspondentes <- setdiff(energia_summary$BAIRRO, bairros_rj2$Bairro) # Encontrar bairros não correspondentes
print(bairros_nao_correspondentes) # Exibir os bairros que não coincidem entre os dois datasets
## character(0)
# Realizar a junção entre os datasets de energia e os bairros corrigidos
energia_bairros <- merge(bairros_rj2, energia_summary, by.x = "Bairro", by.y = "BAIRRO") # Merge entre os datasets
# Filtrar os dados para remover o bairro "FREGUESIA", caso não seja relevante para a análise
energia_bairros <- energia_bairros %>%
filter(Bairro != "FREGUESIA") # Filtrar para não incluir o bairro Freguesia
# Criar uma paleta de cores customizada com base nos percentis de consumo de energia
breaks <- quantile(energia_bairros$total_consumo_kwh, probs = seq(0, 1, by = 0.125), na.rm = TRUE) # Calcular os percentis de consumo de energia
pal <- colorBin(palette = "Reds", domain = energia_bairros$total_consumo_kwh, bins = breaks) # Definir a paleta de cores "Reds" para o consumo de energia
# Criar um mapa interativo com Leaflet para visualizar o consumo de energia por bairro
leaflet(data = energia_bairros) %>%
addTiles() %>% # Adicionar o mapa base (tiles)
addPolygons(
fillColor = ~pal(total_consumo_kwh), # Preencher os bairros com cores baseadas no consumo de energia
fillOpacity = 0.9, # Ajustar a opacidade do preenchimento
color = "transparent", # Remover a borda dos polígonos
weight = 0, # Definir o peso da borda para 0, removendo a linha visível
popup = ~paste("Bairro: ", Bairro, "total_consumo_kwh: ", total_consumo_kwh), # Exibir o nome do bairro e o consumo de energia no popup
label = ~paste("Bairro: ", Bairro, "total_consumo_kwh: ", total_consumo_kwh) # Exibir o nome do bairro e o consumo de energia no rótulo
) %>%
addLegend(
pal = pal, # Adicionar legenda com a paleta de cores
values = energia_bairros$total_consumo_kwh, # Definir os valores para a legenda
title = "total_consumo_kwh", # Título da legenda
opacity = 0.5 # Ajustar a opacidade da legenda
) %>%
setView(lng = -43.1650, lat = -22.9100, zoom = 12) # Ajustar a visualização do mapa para o Rio de Janeiro